Challenge #162: ~マーベルコミックス キャラクター毎の登場作品を調べる~ – Alteryx Weekly Challenge
Developers.IO読者の皆様、映画『アベンジャーズ/エンドゲーム』はもう御覧になりましたでしょうか。
「マーベル・シネマティック・ユニバース」シリーズ(通称"MCU")22作目、11年間の集大成的な作品として世界的にヒットしています。世界全体での興行収入記録についても「タイタニック」を超えて歴代2位にまで辿り着きました。歴代1位の「アバター」超えも視野に入っている状況です。(※2019年5月13日現在)
2019年05月13日時点でのBox Office WORLDWIDE GROSSES(全世界興行収入)ランキング。MCU関連作品はTOP20作品のうち実に7作もランクインしてるんですね。
『アベンジャーズ エンドゲーム』、私も勿論観てきました。鑑賞前のネタバレを極力避けるべく、上映開始日の2019/04/26(金)は有給休暇を取得し、且つ上映館の一番早い上映時刻回を押さえ、万全の体制で鑑賞に臨みました。鑑賞後は同じく公開が待ち遠しくて仕方なかった面々と社内Slackのネタバレ専用チャンネルで思う存分「エンドゲーム」及び「MCU」のネタバレトークを堪能しておりました。(&現在も継続中です)
さて、そんな世界的なトピックとなっているMCUについて、AlteryxのCommunityも飛び付かない訳にも行かなかったようです。Alteryx Weekly Challengeの「お題」として、MCUのストーリーのベース、原案リソースになっている「マーベル・コミック」にちなんだものが出題されていました。
- Challenge #162: Mondays....they're Marvel-ous! - Alteryx Community
- チャレンジ #9: マーベル・コミック・ヒーローズ - Alteryx Community
当エントリでは、こちらの問題についてチャレンジしてみたいと思います。
Challenge #162: Mondays....they're Marvel-ous!
動作環境
当エントリの執筆には、以下の環境を利用しています。
- Windows 10 Pro
- Alteryx Designer 2019.1.6.58192 英語版
お題
お題となるワークフローはこちら。マーベルコミックスに登場している各キャラクターが、何年に発刊された、何というタイトルの何号の雑誌に登場しているか、その情報を作成せよという内容になっています。
1つ目のファイル(characters.csv)は登場人物の情報をまとめたもの。「エンドゲーム」に登場したキャラの名前も見えていますね。
2つ目のファイル(charactersToComics.csv)は後述する3つ目のファイルと1つ目のファイルのID連携を行うための補助的なデータ内容となっています。
3つ目のファイル(comics.csv)は「登場作品」に関する情報がまとめられています。
期待する出力結果がこちら。キャラクター名、コミックタイトル、出版年、号数の内容・順番で情報が集約・整理された形となっています。
ワークフロー実践例
ワークフロー実践例はこちら。
...実はこちら、英語版Communityに投稿されていたAlteryx ACE、Nicole Johnsonさんの投稿されたワークフロー(に対してほんの少しの追加を行ったもの)となります。当初自分でワークフローを組んでチャレンジしていたのですが、終わった後に氏のワークフローを見て、その手数の少なさとシンプルさで『うぉぉ、そんなんであっさり解けてしまえるのか。キャプテンマーベルみたいな凄さがあるな...』と感心した一方、自分の作成したワークフローにはエレガントさが欠けていたので"これ"を紹介してもなぁ...という事で実際にACEの作成したワークフローを読み解いてみる事にしました。
まずは3つの入力データを関連するIDでそれぞれJOINします。ここまでは皆同じ道を通っていますが、ここからがACEの真骨頂。結合されたデータに対してRegEx Toolを利用し、Title情報を3つに分割。括弧で括られた西暦年(Year)、#の後に続く数字情報を半角スペース(\s)で連結したものを各種要素としてパースしています。
RegEx Toolを実行した結果が以下。作品名(Comic Name)、出版年(Year)、号数(Issue Number)に要素が分解されています。解析出来なかった要素はNullとなり、また号数(Issue Number)に相当する数値の部分が小数点を含む値の場合も、整数部分で切り捨てて情報が取得出来ているのが分かります。(というか何で小数点区切りになるんだ?w)
対象要素がパース出来たら、後は内容の微調整、ちょっとしたところを手直しすればOKです。Formula Toolを使い、必要な処理を諸々加えて行きます。(赤枠で囲った定義は私の方で追加しました/後述箇所で利用する検証ツールを実行してみた結果、期待値と結果値が一致していなかったため)
- パースの結果Comic Nameが取得出来ていなければ、タイトルの内容を使う
- Issue NumberをTrim
- Issue Numberのパース結果が「#」のみとなった場合、Null扱いとする
- Issue NumberがNULLとなっているのであれば空文字で置き換える
- Comic NameをTrim
次いで、Summarize Toolを使って情報をグルーピングします。結合した結果同じ値を持つ行が重複しているための対処ですが、挙動としてSummarize ToolでGroup By操作を行った場合は指定の順番で(昇順)ソートが行われるようです。(なのでソート Toolも使わずに済んでいます)
ワークフローのメイン処理としては以上で終了。最後にCrew MacroのExpect Equal Toolで結果を比較しています。
まとめ
という訳で、Alteryx Weekly Challenge #162、マーベル・コミックスに関するお題でした。ポイントとしては『RegEx Tool』の実にエレガント且つスマートな使い方に尽きると思われます。ここで要件を満たす式を作る事ができれば、すなわちAlteryxでのRegEx Toolをマスターする事が出来れば鬼に金棒、MCUにおける"インフィニティ・ストーン"並のパワーを得られるのではないか、と思いました。(※こじつけ)
(Alteryxの)RegEx Tool及び正規表現周りの知識については今後理解を更に深めて行きたいと思います。